今天我们接着昨天的话题

interface

 Go语言的设计者之一Rob Pike说过,如果只能选择一个Go语言的特性移植到其他语言,他会选择接口。

 Go语言对编程哲学的变革正是在于接口。《Go语言编程》中说道:“如果说goroutine和channel是支撑起Go语言的并发模型的基石,让Go语言在如今集群化和多核化的时代成为一道极为亮丽的风景,那么接口是Go语言整个类型系统的基石,让Go语言在基础编程哲学的探索上达到前所未有的高度”,这段话可谓是极其之高的评价。

 与其他语言的接口相比,Go语言的接口是”非侵入式”的,即不需要明确声明接口的继承,只需要实现其所有函数,就实现了该接口。

 这样做的好处有很多。首先Java,C++等类库的继承树变得毫无意义;其次,我们不用再纠结于接口应该拆的多细;再次,不用为了实现一个接口而导入一个包。

 Go语言中接口的各种操作也是非常方便的,赋值,查询,组合都能非常优雅的完成。

 最后再说说interface{}这个在Go语言中的地位类似于Java中的Object,interface{]是可以指向任何对象的Any类型。最为经典的fmt库中的Print等函数 func Printf(fmt string,args ...interface{}) 我们可以用interface{}实现接受任意数量任意类型的参数 再配合上接口查询 类型查询 循环等写出非常漂亮的代码。

错误处理

 自从C++以来,错误处理不仅作为一种编程范式,也在语言层面上增加了错误处理的支持。Go语言中的错误处理有个标准模式,即error接口

 defer也是个非常有意思的东西,它类似C++中的析构函数,如果你是C/C++程序员,你肯定经历过打开一个文件句柄却忘记关闭的情况,使用defer就能很漂亮的解决这个问题。

 panic()和recover()作为错误处理的两个内置函数,使用起来也非常优雅。

OOP特性

 Go语言没有其他面向对象编程语言那些继承,虚函数,构造函数等的概念,甚至没有类的概念。有的只是继承于C语言的struct。Go语言放弃了包括继承在内的大量面向对象特性,只保留了组合这个最基本的特性。 Go语言中可以为任何类型添加方法,自然struct加上方法也就是类,组合也就能实现继承的性质,而且Go语言中没有this指针这个让无数初学者头疼的玩意,在Go语言中本体对象是显式传递的。

 Go语言对面向对象编程的支持是语言类型中的天然组成部分,没有太多花里胡哨的东西,整个类型系统再与接口结合,浑然一体。我们用学习C++高级特性的功夫就可以用Go语言编出很多漂亮的工程。

####总结

 Go语言语法给我的感觉就是 简洁 优雅 ,它通过强大的语言支持和简单的组合就能完成其他语言需要深厚的功底和大量功夫所能实现的特性。 与vim的设计哲学 命令的组合 也非常相近。

 我是一个非常喜欢简洁,优雅的人,所以当接触到Go的不久,我就为她所痴迷,相信Go势必也会在将来占有很重要的地位。

[返回顶部]()



blog comments powered by Disqus

Published

2013-08-14

Categories


Tags